/* 
1. interface 定义一个新的引用数据类型
2. type是为已有的基本类型或引用类型取别名，并没有定义新的类型
3. 一般开发中对象类型用 interface 定义，数组类型用 type, type也可以定义基本类型
4. 扩展
● type 声明的类型不能重名，interface 声明的重命名会声明合并；
● 两者继承扩展的方式不同；
  ○ interface 使用 extends 继承
  ○ type 使用 & 关键字
*/

interface Product {
  name: string;
  price: number;
}

type Products = Product[]

const p: Product = {
  name: 'A',
  price: 12,
  // title: 'abc'
}

const ps: Products = [
  p,
  // {}
] 

type Name = string

let n: Name = 'abc'

// type Products = {}  // type不能重复
interface Product { // interface可以重复, 会自动合并
  title: string
}

// 接口继承用extends
interface MyProduct extends Product {

}

// type继承用 &
type A = {
  name: string
}
type NameAge = A & { // 将两个类型进行了合并
  age: number
}

const na: NameAge = {
  name: 'abc',
  age: 12
}
